﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;

namespace Assignment
{
    class TodoListBO
    {
        private List<Todo> _todoList;

        public TodoListBO()
        {
            _todoList = new List<Todo>();
        }

        public int Add(Todo todo)
        {
            int check = 1;
            foreach (Todo td in _todoList)
            {
                if (td.Content == todo.Content && td.CreateDate.Date == todo.CreateDate.Date && td.DueDate == todo.DueDate)
                {
                    check = 0;
                    break;
                }
            }

            if (check == 1)
            {
                _todoList.Add(todo);
            }
            return check;
        }

        public int Remove(Todo todo)
        {
            int rt = 0;
            foreach (Todo td in _todoList)
            {
                if (td.ID == todo.ID)
                {
                    _todoList.Remove(td);
                    rt = 1;
                    break;
                }
            }
            return rt;
        }
        public Todo GetByID(int id)
        {
            Todo rt = null;
            foreach (Todo td in _todoList)
            {
                if (td.ID == id)
                {
                    rt = td;
                }
            }
            return rt;

        }
        public bool Complete(Todo todo)
        {
            if (!_todoList.Contains(todo))
            {
                return false;
            }
            else
            {
                int index = _todoList.IndexOf(todo);
                _todoList.ElementAt(index).Status = true;
                return true;
            }
        }

        public List<Todo> GetByPriority()
        {
            Todo[] lTodo = _todoList.ToArray();
            Array.Sort(lTodo, new SortByPriority());
            return lTodo.ToList<Todo>();
        }

        public List<Todo> GetByCreateDate()
        {
            Todo[] lTodo = _todoList.ToArray();
            Array.Sort(lTodo, new SortByCreateDate());
            return lTodo.ToList<Todo>();
        }

        public List<Todo> GetByDueDate()
        {
            Todo[] lTodo = _todoList.ToArray();
            Array.Sort(lTodo, new SortByDueDate());
            return lTodo.ToList<Todo>();
        }
        public List<Todo> GetByComplete()
        {
            Todo[] lTodo = _todoList.ToArray();
            Array.Sort(lTodo, new SortByComplete());
            return lTodo.ToList<Todo>();
        }
    }
}
